﻿#pragma warning(disable: 4477)
#pragma warning(disable: 4996)
#pragma warning(disable: 6031)
#pragma warning(disable: 6054)
/*
 */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <assert.h>

typedef double Real;
const Real PI = 3.14159265359;
 

typedef struct TContext_s
{
	int n;
	int m;
	int k;
}TContext;

TContext context;

void read_data(TContext* ctx)
{
	scanf("%d", &ctx->n);
}

char buf[1024] = "";

int mycount(int n, int s, int k)
{
	int m = 0;
	for (; k <= s && n>0; ++k)
		if (n % k == 0) {
			++m;
			n /= k;
		}
		else {
			break;
		}
	return m;
}

float f(float x)
{
	float y=0;
	if (x <= 50)
		return x*0.53;
	return x * 0.53 + (x - 50) * 0.05;
}

void match(TContext*ctx)
{
	int q = sqrt(ctx->n)+1;
	int m = 0;
	int kp = 0;
	int kmax = ctx->n;
	int smax = 0;
	for (int k=2; k <= q; ++k)
	{
		m = mycount(ctx->n, q, k);
		if (m > smax) {
			smax = m;
			kmax = k;
		}			
	}
	if (smax == 0)
		printf("%d\n%d\n", 1, ctx->n);
	else
	{
		printf("%d\n", smax);
		printf("%d", kmax);
		for (int i = 1; i < smax; ++i)
			printf("*%d", kmax + i);
		printf("\n");
	}
}

void do_task(TContext * ctx)
{
	match(ctx);
}

void solve(TContext* ctx)
{
	char c;
	int letter = 0;
	int blank = 0;
	int digit = 0;
	int other = 0;
	for (int i = 0; i < 10; ++i) {
		scanf("%c", &c);
		if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
			letter++;
		else if ('0' <= c && c <= '9')
			digit++;
		else if (c == ' ' || c == '\r' || c == '\n' || c == '\t')
			blank++;
		else
			other++;
	}
	printf("letter = %d, blank = %d, digit = %d, other = %d\n", letter, blank, digit, other);
}

int main()
{
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-141.txt", "r", stdin);
	solve(&context);
	return 0;
}
